#include<sys/types.h>
#include<unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>
#include<time.h>

int tot = 0;
#define MAXN 100000

/*
 * 子进程没有阻塞任何信号
 * 父进程不断向子进程发送信号
 * 子进程收到的信号，远远少于父进程发送的信号数量
 * 
 * 当父进程被调度运行时，发送多次发送相同信号给子进程，而子进程没有处于调度运行状态，未能delivered该信号
 * 而这信号处于子进程的pending状态，而进程pending状态是通过bit_map来表示，只能表达该信号是否出现过
 * 当轮到子进程被调度，delivered处于pengding状态的信号
 *
 * */
void sig_cont(int signo)
{
	if (signo == SIGCONT) tot++;
}

int main()
{
	int i;

	signal(SIGCONT, sig_cont);

	pid_t pid = fork();
	
	if (pid < 0)
	{
	} else if (pid == 0)
	{
		/* child */
		clock_t st = clock();
		while (clock() - st <= 1000000 );
		printf("total catch signal : %d\n",tot);
		exit(0);
	} else 
	{
		/* father */
		for (i = 0; i < MAXN; i++)
			kill(pid, SIGCONT);
		printf("end\n");
	}
	return 0;
}
